#ifndef PAWN_PROMOTION_ACTION_HPP
#	define PAWN_PROMOTION_ACTION_HPP

#	include "Action.hpp"
#	include "Position.hpp"
#	include "Piece.hpp"
#	include "Chessboard.hpp"
#	include "Rook.hpp"
#	include "Queen.hpp"
#	include "King.hpp"
#	include "Bishop.hpp"
#	include "Knight.hpp"

class PawnPromotionAction : public Action
{
	public:

		PawnPromotionAction(const Position& pos, Piece::Type type);
		PawnPromotionAction(Chess::Color color, const Position& pos, Piece::Type type);
		PawnPromotionAction(Piece* ppawn, Piece::Type type);
		~PawnPromotionAction();
		
		virtual void execute();
		Piece*				getPiece() const;
		Piece*				getPromotedPawn() const;
		const Position& 	getPosition() const;
		Piece::Type 		getPieceType() const;
		
	private:
		const Position		pos;
		Piece::Type 		piece_type;
		Piece*				npiece;
		Piece*				promoted_pawn;
};

#endif
